#ifndef     __BYTE_ALLOC_H
#define     __BYTE_ALLOC_H

#include <stdint.h>

template <uint32_t BYTE_SIZE>
class ByteAlloc {

public:
    uint8_t *alloc(usize_t len) {
        if ((m_index + len) > BYTE_SIZE) {
            m_index = 0;
        }
        return m_buf + m_index;
    }

    void next(usize_t len) {
        m_index += len;
    }

    uint8_t *alloc_next(usize_t len) {
        if ((m_index + len) >= BYTE_SIZE) {
            m_index = 0;
        }
        uint8_t *p = m_buf + m_index;
        m_index += len;
        return p;
    }

private:
    uint8_t m_buf[BYTE_SIZE];
    uint32_t m_index = 0;
};


#endif
